/*
 * @Author: swc shanwenchao12138@163.com
 * @Date: 2024-07-29 15:34:55
 * @LastEditors: zss
 * @LastEditTime: 2024-12-04 13:11:52
 * @FilePath: \vuexf\src\components\base\grid\o-base-grid\gridFlowchart\config.ts
 * @Description:
 * @Version: 2.0
 * @Autor: swc
 */
import { T_srv, Tsrv, ifs, ts, tvs, vue } from '@/services';
import {
  N_cFlowchart,
  N_oContextMenu,
  N_oInteraction,
  N_oSimpleToolbar
} from '@/types';
import { ILayout } from '@antv/layout';
import { I_cmd, T_cmd } from './command';

const nodePorts = {
  groups: {
    top: {
      position: 'top',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#5F95FF',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'hidden'
          }
        }
      }
    },
    right: {
      position: 'right',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#5F95FF',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'hidden'
          }
        }
      }
    },
    bottom: {
      position: 'bottom',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#5F95FF',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'hidden'
          }
        }
      }
    },
    left: {
      position: 'left',
      attrs: {
        circle: {
          r: 4,
          magnet: true,
          stroke: '#5F95FF',
          strokeWidth: 1,
          fill: '#fff',
          style: {
            visibility: 'hidden'
          }
        }
      }
    }
  },
  items: [
    {
      group: 'top'
    },
    {
      group: 'right'
    },
    {
      group: 'bottom'
    },
    {
      group: 'left'
    }
  ]
};
const cusrNode = (): N_cFlowchart.I_node[] => {
  return [
    // {
    //   name: 'grid-begin',
    //   cls: {
    //     inherit: 'c-rect',
    //     attrs: {
    //       body: {
    //         rx: 26,
    //         ry: 26
    //       },
    //       label: {
    //         text: Tsrv.getI18nBySrv('开始')
    //       }
    //     },
    //     data: {
    //       unique: true
    //     }
    //   },
    //   overwrite: true
    // },
    // {
    //   name: 'grid-end',
    //   cls: {
    //     inherit: 'c-rect',
    //     attrs: {
    //       body: {
    //         rx: 26,
    //         ry: 26
    //       },
    //       label: {
    //         text: Tsrv.getI18nBySrv('结束')
    //       }
    //     },
    //     data: {
    //       id: Tsrv.utils.custUUID(8, 16),
    //       unique: true
    //     }
    //   },
    //   overwrite: true
    // },
    {
      // name: 'bpmn-activity',
      name: 'grid-node',
      cls: {
        inherit: 'c-rect',
        markup: [
          {
            tagName: 'rect',
            selector: 'body'
          },
          {
            tagName: 'image',
            selector: 'img'
          },
          {
            tagName: 'text',
            selector: 'label'
          }
        ],
        attrs: {
          body: {
            rx: 6,
            ry: 6
          },
          // img: {
          //   x: 3,
          //   y: 3,
          //   width: 12,
          //   height: 12,
          //   'xlink:href': 'img/icons/user.png'
          // },
          label: {
            text: Tsrv.getI18nBySrv('节点')
          }
        },
        data: {
          nodeID: Tsrv.getSnowIDFmtStr()
        }
      },
      overwrite: true
    }
  ];
};
const cusrEdge = (): N_cFlowchart.I_edge[] => {
  return [
    {
      name: 'grid-edge',
      options: {
        inherit: 'edge',
        attrs: {
          line: {
            stroke: '#A2B1C3',
            strokeWidth: 1,
            targetMarker: {
              name: 'block',
              width: 12,
              height: 8
            }
          }
        },
        zIndex: 0
      },
      overwrite: true
    }
  ];
};
const cellContentMenuItem = (): N_oContextMenu.I_menuItem[] => [
  // {
  //   name: 'debug:debug',
  //   title: '测试',
  //   icon: 'wy-icon wy-debug',
  //   isShow: true,
  //   disabled: false,
  //   children: []
  // }
  // {
  //   name: 'copyAdd:cell',
  //   title: '复制新增',
  //   icon: 'wy-icon wy-conflictAnalysis',
  //   isShow: true,
  //   disabled: false,
  //   children: []
  // }
  // {
  //   name: 'modify:cell:data',
  //   title: '修改属性',
  //   icon: 'wy-icon wy-lianluodan',
  //   isShow: true,
  //   disabled: false,
  //   children: []
  // }
];
const nodeContentMenuItem = (): N_oContextMenu.I_menuItem[] => [
  {
    name: 'add:node:grid-node',
    title: '新增节点',
    icon: 'wy-icon wy-insert',
    isShow: true,
    disabled: false,
    children: []
  },
  {
    name: 'edit:node:grid-node',
    title: '编辑节点',
    icon: 'wy-icon wy-bianji',
    isShow: true,
    disabled: false,
    children: []
  },
  {
    name: 'custom:remove',
    title: '删除节点',
    icon: 'wy-icon wy-huishouzhan1',
    isShow: true,
    disabled: false,
    children: []
  }
];
const blankContentMenuItem = (): N_oContextMenu.I_menuItem[] => [
  {
    name: 'add:node:grid-node',
    title: '新增节点',
    icon: 'wy-icon wy-insert',
    isShow: true,
    disabled: false,
    children: []
  },
  {
    name: 'export:blank:svg',
    title: '导出SVG',
    icon: 'wy-icon wy-svg',
    isShow: true,
    disabled: false,
    children: []
  },
  {
    name: 'export:blank:png',
    title: '导出PNG',
    icon: 'wy-icon wy-png',
    isShow: true,
    disabled: false,
    children: []
  },
  {
    name: 'export:blank:jpeg',
    title: '导出JPEG',
    icon: 'wy-icon wy-jpeg',
    isShow: true,
    disabled: false,
    children: []
  }
];
const edgeContentMenuItem = (): N_oContextMenu.I_menuItem[] => [];
// const graphToolbar = (): Array<N_oSimpleToolbar.I_Conf> => {
const graphToolbar: Array<N_oSimpleToolbar.I_Conf> = [
  {
    key: 'edit',
    type: 'button',
    class: 'wy-rule-edit',
    title: '编辑',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: true,
    separator: false,
    isHide: false
  },
  {
    key: 'cancelEdit',
    type: 'button',
    class: 'wy-yiquxiao',
    title: '取消编辑',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: true,
    separator: false,
    isHide: false
  },
  // {
  //   key: 'save',
  //   type: 'button',
  //   class: 'wy-baocun41',
  //   title: '保存',
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: false,
  //   disabled: true,
  //   separator: false,
  //   isHide: false
  // },
  // {
  //   key: 'undo',
  //   type: 'button',
  //   // 图样式
  //   class: 'wy-undo',
  //   title: '撤销',
  //   // 无效？
  //   disabled: true,
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: false,
  //   // 下级分格线
  //   separator: false,
  //   isHide: false
  // },
  // {
  //   key: 'redo',
  //   type: 'button',
  //   class: 'wy-redo',
  //   title: '重做',
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: false,
  //   disabled: true,
  //   separator: false,
  //   isHide: false
  // },
  {
    key: 'zoomIn',
    type: 'button',
    class: 'wy-zoom',
    title: '放大',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: false,
    separator: true,
    isHide: false
  },
  {
    key: 'zoomOut',
    type: 'button',
    class: 'wy-zoom-out',
    title: '缩小',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: false,
    separator: false,
    isHide: false
  },
  // {
  //   key: 'autoZoom',
  //   type: 'button',
  //   class: 'wy-shiheyemian',
  //   title: '适应画布',
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: false,
  //   disabled: false,
  //   separator: false,
  //   isHide: false
  // },
  // {
  //   key: 'actualSize',
  //   type: 'button',
  //   class: 'wy-actual_size',
  //   title: '实际尺寸',
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: false,
  //   disabled: false,
  //   separator: true,
  //   isHide: false
  // },
  {
    key: 'grid',
    type: 'button',
    class: 'wy-wangge',
    title: '网格',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: false,
    separator: false,
    isHide: false
  },
  {
    key: 'align',
    type: 'button',
    class: 'wy-pailiexiaduiqi',
    title: '对齐线',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: true,
    disabled: false,
    separator: false,
    isHide: false
  },
  // {
  //   key: 'nav',
  //   type: 'button',
  //   class: 'wy-wizard',
  //   title: '地图',
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: true,
  //   disabled: false,
  //   separator: true,
  //   isHide: false
  // },
  // {
  //   key: 'layout',
  //   type: 'button',
  //   class: 'wy-paiban',
  //   title: '排版',
  //   // 按下的样式 单锁开关按扭样式控制
  //   isOpen: false,
  //   disabled: false,
  //   separator: true,
  //   isHide: false
  // },
  {
    key: 'refresh',
    type: 'button',
    class: 'wy-shuaxin13',
    title: '刷新',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: false,
    separator: false,
    isHide: false
  },
  {
    key: 'switch',
    type: 'button',
    class: 'wy-biangeng', // jichengkaifa
    title: '切换',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: false,
    separator: false,
    isHide: false
  },
  {
    key: 'fullScreen',
    type: 'button',
    class: 'wy-ios-expand', // ios-contract
    title: '全屏',
    // 按下的样式 单锁开关按扭样式控制
    isOpen: false,
    disabled: false,
    separator: false,
    isHide: false
  }
];
const layoutCfg: ILayout.LayoutOptions = {
  type: 'dagre', // 布局类型
  rankdir: 'LR', // 布局的方向。T：top（上）；B：bottom（下）；L：left（左）；R：right（右）
  // begin:[0,0] , //布局左上角对齐位置 [number,number]
  nodeSize: 50,
  nodesep: 30,
  controlPoints: true
};
const getCf = (): N_cFlowchart.I_conf => {
  const cf = new N_cFlowchart.T_conf();
  cf.regNodes = cusrNode;
  cf.regEdges = cusrEdge;
  // cf.regToolbar = graphToolbar;
  cf.toolbar.list = graphToolbar;
  cf.rightPanel = {
    show: false,
    width: 200,
    opened: false
  };
  cf.layout = layoutCfg;
  // 隐藏小地图
  cf.garph.minimap = false;
  // 隐藏左侧图库工具栏
  cf.stencil.show = false;
  return cf;
};
export {
  I_cmd,
  N_cFlowchart,
  N_oContextMenu,
  N_oInteraction,
  N_oSimpleToolbar,
  T_cmd,
  T_srv,
  Tsrv,
  blankContentMenuItem,
  cellContentMenuItem,
  cusrNode,
  edgeContentMenuItem,
  getCf,
  graphToolbar,
  ifs,
  nodeContentMenuItem,
  nodePorts,
  ts,
  tvs,
  vue
};
